{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * revised and tuned configuration, updated views"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/1/AstroCNNModel_revised_tuned_20211013_015513',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/2/AstroCNNModel_revised_tuned_20211013_020014',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/3/AstroCNNModel_revised_tuned_20211013_020440',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/4/AstroCNNModel_revised_tuned_20211013_020901',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/5/AstroCNNModel_revised_tuned_20211013_021315',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/6/AstroCNNModel_revised_tuned_20211013_021730',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/7/AstroCNNModel_revised_tuned_20211013_022143',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/8/AstroCNNModel_revised_tuned_20211013_022606',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/9/AstroCNNModel_revised_tuned_20211013_023040',\n",
       " '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1/10/AstroCNNModel_revised_tuned_20211013_023457']"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/revised_tuned_30_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-30-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v8-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2233 records\n",
      "Running model 2\n",
      "2233 records\n",
      "Running model 3\n",
      "2233 records\n",
      "Running model 4\n",
      "2233 records\n",
      "Running model 5\n",
      "2233 records\n",
      "Running model 6\n",
      "2233 records\n",
      "Running model 7\n",
      "2233 records\n",
      "Running model 8\n",
      "2233 records\n",
      "Running model 9\n",
      "2233 records\n",
      "Running model 10\n",
      "2233 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.030499761581475493"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 1.0\n",
      "Precision: 0.4978540772532189\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "282535014\n",
      "283330382\n",
      "28570131\n",
      "375927073\n",
      "385776685\n",
      "69906465\n",
      "136728967\n",
      "14209654\n",
      "163367359\n",
      "16740282\n",
      "170653829\n",
      "188258751\n",
      "188655930\n",
      "1954685032\n",
      "199376584\n",
      "232524196\n",
      "267924099\n",
      "276165770\n",
      "356776209\n",
      "416282321\n",
      "136651206\n",
      "154214348\n",
      "202442062\n",
      "239639659\n",
      "24860612\n",
      "277848886\n",
      "278555119\n",
      "278910035\n",
      "312821931\n",
      "330470939\n",
      "357302392\n",
      "395986110\n",
      "417208086\n",
      "431416493\n",
      "469465627\n",
      "2041994942\n",
      "252588526\n",
      "367610104\n",
      "431338538\n",
      "117170301\n",
      "192591652\n",
      "196919670\n",
      "198555242\n",
      "240833511\n",
      "240897594\n",
      "249917671\n",
      "279064110\n",
      "301829477\n",
      "309230360\n",
      "312060273\n",
      "332870317\n",
      "347492958\n",
      "381847922\n",
      "468608862\n",
      "470684484\n",
      "622842565\n",
      "94280922\n",
      "127846210\n",
      "21133246\n",
      "154699543\n",
      "156509985\n",
      "164528404\n",
      "165500081\n",
      "165614600\n",
      "18178958\n",
      "188728924\n",
      "233197293\n",
      "237278147\n",
      "274483823\n",
      "27896467\n",
      "356822358\n",
      "377253895\n",
      "390973110\n",
      "405687343\n",
      "470085803\n",
      "261814771\n",
      "269291226\n",
      "391032362\n",
      "408602527\n",
      "408945155\n",
      "428942240\n",
      "470309381\n",
      "646535555\n",
      "648359612\n",
      "82242456\n",
      "142615793\n",
      "142751024\n",
      "147608359\n",
      "147879328\n",
      "154491644\n",
      "257048642\n",
      "56861756\n",
      "91987762\n",
      "138847344\n",
      "144334378\n",
      "14826027\n",
      "148968233\n",
      "150384768\n",
      "165373714\n",
      "17655496\n",
      "18907019\n",
      "392402786\n",
      "97487520\n",
      "135171752\n",
      "154271808\n",
      "159636125\n",
      "165944402\n",
      "198147416\n",
      "202467266\n",
      "219824182\n",
      "267821182\n",
      "275628557\n",
      "399167691\n",
      "67685553\n",
      "230197530\n",
      "284266496\n",
      "9037655\n",
      "198184659\n",
      "298647682\n",
      "1400086045\n",
      "113496703\n",
      "118139893\n",
      "118398402\n",
      "119088713\n",
      "119501687\n",
      "149124218\n",
      "161030195\n",
      "167039826\n",
      "167809450\n",
      "177163343\n",
      "177309966\n",
      "182074579\n",
      "183076970\n",
      "201601338\n",
      "21601170\n",
      "22892207\n",
      "230968422\n",
      "260654514\n",
      "261205462\n",
      "267363765\n",
      "269378599\n",
      "270342707\n",
      "270505202\n",
      "271999852\n",
      "273790685\n",
      "276738707\n",
      "276965481\n",
      "278409392\n",
      "278632192\n",
      "278724765\n",
      "278822780\n",
      "279475851\n",
      "281578420\n",
      "287722370\n",
      "290289792\n",
      "291374558\n",
      "293527927\n",
      "293580950\n",
      "294205251\n",
      "294399290\n",
      "294679419\n",
      "294753197\n",
      "299945796\n",
      "300086670\n",
      "300153494\n",
      "30275847\n",
      "302968162\n",
      "30407196\n",
      "305932274\n",
      "306643277\n",
      "306772814\n",
      "306790702\n",
      "30722286\n",
      "309650507\n",
      "311103813\n",
      "311250324\n",
      "317382479\n",
      "318518150\n",
      "31868634\n",
      "31870020\n",
      "319865847\n",
      "320356995\n",
      "322284262\n",
      "323242740\n",
      "323427335\n",
      "326693475\n",
      "340178535\n",
      "341119264\n",
      "348957284\n",
      "349152250\n",
      "350137597\n",
      "360914816\n",
      "363404187\n",
      "370038896\n",
      "371839042\n",
      "372851675\n",
      "373919592\n",
      "379191982\n",
      "380397303\n",
      "382304847\n",
      "382310805\n",
      "384065528\n",
      "384341508\n",
      "38679633\n",
      "388205924\n",
      "394288878\n",
      "404342830\n",
      "404733023\n",
      "404851508\n",
      "404851552\n",
      "404851966\n",
      "404934011\n",
      "40602499\n",
      "406091286\n",
      "406098128\n",
      "406943526\n",
      "406971913\n",
      "407615704\n",
      "410087746\n",
      "410339095\n",
      "410344104\n",
      "41256189\n",
      "419611478\n",
      "424880132\n",
      "425760313\n",
      "446698252\n",
      "466098383\n",
      "466275299\n",
      "466685972\n",
      "63175919\n",
      "76226680\n",
      "87060979\n",
      "90482156\n",
      "109851914\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.031559</td>\n",
       "      <td>0.120016</td>\n",
       "      <td>0.368521</td>\n",
       "      <td>0.000825</td>\n",
       "      <td>0.699821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.296698</td>\n",
       "      <td>0.094667</td>\n",
       "      <td>0.256354</td>\n",
       "      <td>0.000378</td>\n",
       "      <td>0.474414</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.250787</td>\n",
       "      <td>0.113039</td>\n",
       "      <td>0.177435</td>\n",
       "      <td>0.000572</td>\n",
       "      <td>0.618036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.163963</td>\n",
       "      <td>0.100648</td>\n",
       "      <td>0.095156</td>\n",
       "      <td>0.000061</td>\n",
       "      <td>0.732817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.331766</td>\n",
       "      <td>0.108000</td>\n",
       "      <td>0.115102</td>\n",
       "      <td>0.000282</td>\n",
       "      <td>0.439637</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.096452</td>\n",
       "      <td>0.085910</td>\n",
       "      <td>0.185175</td>\n",
       "      <td>0.000493</td>\n",
       "      <td>0.751515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.464592</td>\n",
       "      <td>0.107475</td>\n",
       "      <td>0.183876</td>\n",
       "      <td>0.000434</td>\n",
       "      <td>0.345437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.133975</td>\n",
       "      <td>0.082536</td>\n",
       "      <td>0.140145</td>\n",
       "      <td>0.000531</td>\n",
       "      <td>0.631758</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.322641</td>\n",
       "      <td>0.062306</td>\n",
       "      <td>0.269902</td>\n",
       "      <td>0.000186</td>\n",
       "      <td>0.373314</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.116021</td>\n",
       "      <td>0.105647</td>\n",
       "      <td>0.248553</td>\n",
       "      <td>0.000077</td>\n",
       "      <td>0.626884</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "tic_id                                                     \n",
       "404220255  0.031559  0.120016  0.368521  0.000825  0.699821\n",
       "404220255  0.296698  0.094667  0.256354  0.000378  0.474414\n",
       "404220255  0.250787  0.113039  0.177435  0.000572  0.618036\n",
       "404220255  0.163963  0.100648  0.095156  0.000061  0.732817\n",
       "404220255  0.331766  0.108000  0.115102  0.000282  0.439637\n",
       "404220255  0.096452  0.085910  0.185175  0.000493  0.751515\n",
       "404220255  0.464592  0.107475  0.183876  0.000434  0.345437\n",
       "404220255  0.133975  0.082536  0.140145  0.000531  0.631758\n",
       "404220255  0.322641  0.062306  0.269902  0.000186  0.373314\n",
       "404220255  0.116021  0.105647  0.248553  0.000077  0.626884"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 404220255)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [disp_e_p, disp_n_p, disp_j_p, disp_s_p, disp_b_p, maxcount, disp_e, disp_n, disp_j, disp_s, disp_b]\n",
       "Index: []"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 421845505]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_e']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9751066591305473, max R: 1.0, max P: 1.0\n",
      "100% recall at: 49%, threshold: 0.030499761581475493\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.4, 1.0))\n",
    "plt.ylim((0.4, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
